import java.util.Arrays;

public class MoveZero {
    public static void moveZero1(int[] num) {
        //定义两个指针，一个指向数组的开头位置0下标
        //一个指向数组的结束位置length - 1下标
        int i = 0;
        int j = num.length - 1;

        //当i < j的时候，循环
        while( i < j) {
            //
            while( i < j && num[i] != 0) {
                i++;
            }

            while(i < j && num[j] == 0) {
                j--;
            }

            swap(num,i,j);

            //问题：如何保证非0元素的相对顺序？
        }
    }

    public static void swap(int[] array,int i,int j) {
        int tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }

    public static void moveZero(int[] array) {
        //定义两个指针
        int dest = -1;
        int cur = 0;
        while(cur != array.length) {
            if(array[cur] != 0) {
                swap(array,dest +1,cur);
                dest++;
            }
            cur++;
        }
    }

    public static void main(String[] args) {
        int[] array = new int[]{0,1,0,3,12};
//        moveZero(array);
        moveZero(array);
        System.out.println(Arrays.toString(array));
    }
}
